//柯里化解决兼容性问题--判断事件监听
//为什么使用立即执行函数：如果我们把这个函数放到文件头部，就可以先进行执行判断，我们在后面就能使用我们整合以后的事件监听方法了
//element表示哪个元素需要监听，
// type是元素要添加什么类型的事件，
// listener就是执行的回调函数，
// useCapture就是要进行事件冒泡或者事件捕获的选择
//规避this的指向问题，用call进行this的绑定，并且把原来函数里面隐藏的Event对象代入到参数里面
const whichEvent = (function () {
    if (window.addEventListener) {
        return function (element, type, listener, useCapture) {
            element.addEventListener(type, function (e) {
                listener.call(element, e);

            }, useCapture);
        }
    } else if (window.attachEvent) {
        return function (element, type, handler) {
            element.attachEvent('on' + type, function (e) {
                handler.call(element, e);
            });
        }
    }
})();
